Manejo de Bases de Datos

Marco de datos

Para trabajar con bases de datos en R se pueden construir o cargar al software. En cualquier caso, la idea es tener un objeto data.frame que el tipo que identifica las bases de datos.

Construcción

Para construir una base de datos, se debe definir las variables que representan las columnas, y el contenido de cada variable son la representación en cada fila, es importante que todas las variables tengan el mismo tamaño para construir una base de datos consistente.

years <- 1980:2019
nombre <- sample(c("Luisa","Andrés","Camilo","Natalia"),
                 size = 40,replace = T)
peso <- round(rnorm(40,60,5),2)
estatura <- ifelse(nombre=="Luisa",1.56,
                   ifelse(nombre=="Andrés",1.78,
                          ifelse(nombre=="Camilo",1.70,1.68)))
imc <- round(peso/estatura^2,2)

Cada variable está asignada de manera independiente, aún no es una base de datos. Para que cumpla con la condición de base de datos es necesario que cada fila de cada variable represente una medición, es decir, si la primera posición del nombre es Camilo entonces las primera posición de las variables year, peso, estatura y imc deben corresponder a Camilo.

Para construir la base de datos, se usa el comando data.frame.

args(data.frame)
## function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, 
##     fix.empty.names = TRUE, stringsAsFactors = default.stringsAsFactors()) 
## NULL
(datos <- data.frame(years, nombre, peso, estatura, imc))
str(datos)
## 'data.frame':    40 obs. of  5 variables:
##  $ years   : int  1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 ...
##  $ nombre  : Factor w/ 4 levels "Andrés","Camilo",..: 3 1 2 2 2 2 3 3 1 4 ...
##  $ peso    : num  55.2 57.6 56.1 59.4 61 ...
##  $ estatura: num  1.56 1.78 1.7 1.7 1.7 1.7 1.56 1.56 1.78 1.68 ...
##  $ imc     : num  22.7 18.2 19.4 20.6 21.1 ...

Con la base de datos creada se puede manipular más fácil, para ingresar a las filas y columnas se trabaja similar a las matrices.

datos[,1]
##  [1] 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993
## [15] 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007
## [29] 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019
datos[,"nombre"]
##  [1] Luisa   Andrés  Camilo  Camilo  Camilo  Camilo  Luisa   Luisa  
##  [9] Andrés  Natalia Camilo  Luisa   Camilo  Andrés  Natalia Andrés 
## [17] Natalia Natalia Camilo  Luisa   Andrés  Andrés  Luisa   Camilo 
## [25] Natalia Natalia Luisa   Camilo  Camilo  Camilo  Camilo  Luisa  
## [33] Luisa   Andrés  Camilo  Luisa   Andrés  Luisa   Natalia Camilo 
## Levels: Andrés Camilo Luisa Natalia
datos[8:24,]
datos[,c(1,3,5)]
datos[,c("years","imc")]

cargar base de datos

R maneja casi cualquier tipo de archivo de bases de datos, pero su formato de creación de base de datos es .Rds o .RData, en el paquete base y utilsexiste una colección de funciones para leer marcos de datos.

## [1] "read.dcf"     "readBin"      "readChar"     "readline"    
## [5] "readLines"    "readRDS"      "readRenviron" "Sys.readlink"
##  [1] "read.csv"         "read.csv2"        "read.delim"      
##  [4] "read.delim2"      "read.DIF"         "read.fortran"    
##  [7] "read.fwf"         "read.socket"      "read.table"      
## [10] "readCitationFile" "readClipboard"    "readRegistry"

Para cargar otras extensiones de bases de datos es necesario utilizar paquetes.

# Para otros Software de estadística (Minitab, SAS, Stata, SPSS)
install.packages("haven",dependencies = T)
install.packages("foreign",dependencies = T)

# Archivos de excel
install.packages("xlsx",dependencies = T) # Requiere Java
install.packages("readxl",dependencies = T)

# SQL
install.packages("sqldf",dependencies = T)

Para trabajar con SQL en R se recomienda leer el artículo de Josh Errickson y las notas de Data Carpentry.

La base de datos de el ICFES 2015-02 está disponible en Excel, todos los ejemplos que acontinuación se muestran se trabajan con esta base de datos.

library(xlsx)
library(readxl)

Icfes <- read.csv("ICFES20152.csv",sep = ",")

Si el archivo tiene la extensión .xlsx se utiliza los siguientes comandos:

# Con xlsx
Icfes <- read.xlsx(file = "ICFES20152.xlsx",sheetName = 1,encoding = "UTF-8")
Icfes <- read.xlsx2(file = "ICFES20152.xls",sheetIndex = 1)

# Con readxl
Icfes <- read_xlsx(path = "ICFES20152.xlsx")

Para cargar los archivos de esta manera es necesario que se encuentren alojados en la carpeta de trabajo que puede verificar con el comand getwd(), y para asignar una nuava ruta se utiliza el comando setwd(). Una función muy útil para buscar carpetas es choose.dir(), y para seleccionar una archivo específico file.choose().

Icfes
dim(Icfes)
## [1] 12162    24
length(Icfes)
## [1] 24
names(Icfes)
##  [1] "CODINST"                  "NOMBREINSTITUCION"       
##  [3] "CODIGOMUNICIPIO"          "NOMBREMUNICIPIO"         
##  [5] "DEPARTAMENTO"             "CALENDARIO"              
##  [7] "NATURALEZA"               "JORNADA"                 
##  [9] "EVALUADOS"                "PROMLECTURACRITICA"      
## [11] "PROMMATEMATICA"           "PROMSOCIALESYCIUDADANAS" 
## [13] "PROMCIENCIASNATURALES"    "PROMINGLES"              
## [15] "PROMRAZONAMIENTOCUANTITA" "PROMCOMPETENCIASCIUDADAN"
## [17] "DESVLECTURACRITICA"       "DESVMATEMATICA"          
## [19] "DESVSOCIALESYCIUDADANAS"  "DESVCIENCIASNATURALES"   
## [21] "DESVINGLES"               "DESVRAZONAMIENTOCUANTITA"
## [23] "DESVCOMPETENCIASCIUDADAN" "PERIODO"
head(Icfes,n = 3)
tail(Icfes,n = 3)
str(Icfes)
## 'data.frame':    12162 obs. of  24 variables:
##  $ CODINST                 : Factor w/ 12162 levels "000018","000059",..: 9051 5071 7139 1288 2311 3814 3815 5069 5437 7160 ...
##  $ NOMBREINSTITUCION       : Factor w/ 9354 levels "02/03 ALEJANDRO CABAL POMBO",..: 4720 4472 4716 4624 4704 4702 1489 1223 4482 5052 ...
##  $ CODIGOMUNICIPIO         : Factor w/ 1109 levels "05001","05002",..: 1090 1091 1092 1089 1089 1089 1089 1089 1089 1089 ...
##  $ NOMBREMUNICIPIO         : Factor w/ 1026 levels "ABEJORRAL","ABREGO",..: 278 425 443 467 467 467 467 467 467 467 ...
##  $ DEPARTAMENTO            : Factor w/ 33 levels "AMAZONAS","ANTIOQUIA",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ CALENDARIO              : Factor w/ 3 levels "A","B","O": 1 1 1 1 1 1 1 1 1 1 ...
##  $ NATURALEZA              : Factor w/ 2 levels "NO OFICIAL","OFICIAL": 2 2 2 2 2 2 2 1 2 2 ...
##  $ JORNADA                 : Factor w/ 5 levels "COMPLETA U ORDINARIA",..: 2 2 1 2 2 1 1 2 2 2 ...
##  $ EVALUADOS               : num  21 38 31 89 134 75 14 18 45 61 ...
##  $ PROMLECTURACRITICA      : num  42.5 40.1 39.9 49.9 45.9 ...
##  $ PROMMATEMATICA          : num  42 40.2 39.5 47.6 44 ...
##  $ PROMSOCIALESYCIUDADANAS : num  43.7 41.3 38.8 50.3 47 ...
##  $ PROMCIENCIASNATURALES   : num  44.2 41.8 42.7 49.5 46.5 ...
##  $ PROMINGLES              : num  46 43.6 43.8 47.8 46.6 ...
##  $ PROMRAZONAMIENTOCUANTITA: num  41.8 40.3 39.7 48 45 ...
##  $ PROMCOMPETENCIASCIUDADAN: num  42 39 37.7 49.4 46.4 ...
##  $ DESVLECTURACRITICA      : num  5.78 6.01 5.98 7.94 7.88 6.22 6.28 9.65 6.6 8.02 ...
##  $ DESVMATEMATICA          : num  7.37 7.43 9.04 9.5 8.41 ...
##  $ DESVSOCIALESYCIUDADANAS : num  7.52 7.72 8.56 9.38 8.22 ...
##  $ DESVCIENCIASNATURALES   : num  5.94 5.23 5.32 6.81 6.44 ...
##  $ DESVINGLES              : num  6.72 4.48 5.42 7.49 6.13 ...
##  $ DESVRAZONAMIENTOCUANTITA: num  8.23 7.57 9.3 10.42 8.9 ...
##  $ DESVCOMPETENCIASCIUDADAN: num  7.1 7.27 6.77 8.95 8.24 ...
##  $ PERIODO                 : Factor w/ 1 level "20152": 1 1 1 1 1 1 1 1 1 1 ...
class(Icfes)
## [1] "data.frame"
class(Icfes$NOMBREMUNICIPIO)
## [1] "factor"
summary(Icfes)
##     CODINST     
##  000018 :    1  
##  000059 :    1  
##  000075 :    1  
##  000083 :    1  
##  000091 :    1  
##  000125 :    1  
##  (Other):12156  
##                                            NOMBREINSTITUCION
##  INSTITUTO TECNICO PARA EL DESARROLLO RURAL IDEAR   :   28  
##  INSTITUTO REGIONAL COREDI                          :   26  
##  SIMON BOLIVAR                                      :   15  
##  ANTONIO NARIÑO                                     :   14  
##  INSTITUTO DE EDUCACION RURAL SANTA MARIA DEL CAMINO:   13  
##  JORGE ELIECER GAITAN                               :   13  
##  (Other)                                            :12053  
##  CODIGOMUNICIPIO     NOMBREMUNICIPIO       DEPARTAMENTO  CALENDARIO
##  11001  :1459    BOGOTÁ D.C. :1459   BOGOTA      :1459   A:11941   
##  76001  : 438    CALI        : 438   ANTIOQUIA   :1411   B:  191   
##  05001  : 419    MEDELLIN    : 419   VALLE       : 991   O:   30   
##  08001  : 341    BARRANQUILLA: 341   CUNDINAMARCA: 924             
##  13001  : 237    CARTAGENA   : 237   SANTANDER   : 694             
##  54001  : 167    CUCUTA      : 167   ATLANTICO   : 589             
##  (Other):9101    (Other)     :9101   (Other)     :6094             
##       NATURALEZA                   JORNADA       EVALUADOS     
##  NO OFICIAL:3735   COMPLETA U ORDINARIA:2875   Min.   :  1.00  
##  OFICIAL   :8427   MAÑANA              :5701   1st Qu.: 17.00  
##                    NOCHE               :1045   Median : 32.00  
##                    SABATINA - DOMINICAL: 979   Mean   : 44.95  
##                    TARDE               :1558   3rd Qu.: 60.00  
##                    NA's                :   4   Max.   :987.00  
##                                                                
##  PROMLECTURACRITICA PROMMATEMATICA   PROMSOCIALESYCIUDADANAS
##  Min.   :28.00      Min.   : 24.50   Min.   :21.00          
##  1st Qu.:44.74      1st Qu.: 43.57   1st Qu.:43.98          
##  Median :48.19      Median : 48.00   Median :48.32          
##  Mean   :48.66      Mean   : 48.80   Mean   :48.64          
##  3rd Qu.:51.77      3rd Qu.: 52.63   3rd Qu.:52.59          
##  Max.   :77.00      Max.   :100.00   Max.   :83.00          
##                                                             
##  PROMCIENCIASNATURALES   PROMINGLES    PROMRAZONAMIENTOCUANTITA
##  Min.   :25.00         Min.   :25.00   Min.   : 21.50          
##  1st Qu.:44.59         1st Qu.:45.27   1st Qu.: 44.05          
##  Median :48.47         Median :47.51   Median : 48.94          
##  Mean   :49.03         Mean   :49.63   Mean   : 49.67          
##  3rd Qu.:52.45         3rd Qu.:51.27   3rd Qu.: 53.95          
##  Max.   :85.95         Max.   :97.00   Max.   :100.00          
##                                                                
##  PROMCOMPETENCIASCIUDADAN DESVLECTURACRITICA DESVMATEMATICA  
##  Min.   :22.00            Min.   : 0.000     Min.   : 0.000  
##  1st Qu.:44.22            1st Qu.: 6.540     1st Qu.: 7.880  
##  Median :48.13            Median : 7.470     Median : 9.020  
##  Mean   :48.27            Mean   : 7.406     Mean   : 9.056  
##  3rd Qu.:51.92            3rd Qu.: 8.320     3rd Qu.:10.260  
##  Max.   :76.00            Max.   :21.920     Max.   :31.820  
##                                                              
##  DESVSOCIALESYCIUDADANAS DESVCIENCIASNATURALES   DESVINGLES    
##  Min.   : 0.000          Min.   : 0.000        Min.   : 0.000  
##  1st Qu.: 8.140          1st Qu.: 6.560        1st Qu.: 5.620  
##  Median : 9.060          Median : 7.580        Median : 6.840  
##  Mean   : 8.984          Mean   : 7.541        Mean   : 7.501  
##  3rd Qu.: 9.970          3rd Qu.: 8.550        3rd Qu.: 8.940  
##  Max.   :28.000          Max.   :20.510        Max.   :27.790  
##                                                                
##  DESVRAZONAMIENTOCUANTITA DESVCOMPETENCIASCIUDADAN  PERIODO     
##  Min.   : 0.00            Min.   : 0.000           20152:12162  
##  1st Qu.: 8.94            1st Qu.: 7.400                        
##  Median :10.30            Median : 8.240                        
##  Mean   :10.33            Mean   : 8.172                        
##  3rd Qu.:11.76            3rd Qu.: 9.080                        
##  Max.   :32.19            Max.   :23.330                        
## 

El operador $ sirve para extraer las variables del data.frame, siepre y cuando la base de datos posea nombres.

Guardar bases de datos

## [1] "write"      "write.dcf"  "writeBin"   "writeChar"  "writeLines"
## [1] "aspell_write_personal_dictionary_file"
## [2] "write.csv"                            
## [3] "write.csv2"                           
## [4] "write.socket"                         
## [5] "write.table"                          
## [6] "writeClipboard"
## [1] "write.xlsx"  "write.xlsx2"
## [1] "write_dta" "write_sas" "write_sav" "write_xpt"
## [1] "write.arff"    "write.dbf"     "write.dta"     "write.foreign"

Funciones del tipo apply

apply() Aplica la función sobre un la marginal de un arreglo o matriz.

(m <- matrix(c(1:10, 11:20), nrow = 10, ncol = 2))
##       [,1] [,2]
##  [1,]    1   11
##  [2,]    2   12
##  [3,]    3   13
##  [4,]    4   14
##  [5,]    5   15
##  [6,]    6   16
##  [7,]    7   17
##  [8,]    8   18
##  [9,]    9   19
## [10,]   10   20
apply(m, 1, mean)
##  [1]  6  7  8  9 10 11 12 13 14 15
apply(m, 2, mean)
## [1]  5.5 15.5
apply(m, 1:2, function(x) x/2)
##       [,1] [,2]
##  [1,]  0.5  5.5
##  [2,]  1.0  6.0
##  [3,]  1.5  6.5
##  [4,]  2.0  7.0
##  [5,]  2.5  7.5
##  [6,]  3.0  8.0
##  [7,]  3.5  8.5
##  [8,]  4.0  9.0
##  [9,]  4.5  9.5
## [10,]  5.0 10.0
apply(Icfes, 2, length)
##                  CODINST        NOMBREINSTITUCION          CODIGOMUNICIPIO 
##                    12162                    12162                    12162 
##          NOMBREMUNICIPIO             DEPARTAMENTO               CALENDARIO 
##                    12162                    12162                    12162 
##               NATURALEZA                  JORNADA                EVALUADOS 
##                    12162                    12162                    12162 
##       PROMLECTURACRITICA           PROMMATEMATICA  PROMSOCIALESYCIUDADANAS 
##                    12162                    12162                    12162 
##    PROMCIENCIASNATURALES               PROMINGLES PROMRAZONAMIENTOCUANTITA 
##                    12162                    12162                    12162 
## PROMCOMPETENCIASCIUDADAN       DESVLECTURACRITICA           DESVMATEMATICA 
##                    12162                    12162                    12162 
##  DESVSOCIALESYCIUDADANAS    DESVCIENCIASNATURALES               DESVINGLES 
##                    12162                    12162                    12162 
## DESVRAZONAMIENTOCUANTITA DESVCOMPETENCIASCIUDADAN                  PERIODO 
##                    12162                    12162                    12162
apply(Icfes[,9:18], 2, mean)
##                EVALUADOS       PROMLECTURACRITICA           PROMMATEMATICA 
##                44.947788                48.655567                48.799209 
##  PROMSOCIALESYCIUDADANAS    PROMCIENCIASNATURALES               PROMINGLES 
##                48.636474                49.025593                49.633360 
## PROMRAZONAMIENTOCUANTITA PROMCOMPETENCIASCIUDADAN       DESVLECTURACRITICA 
##                49.672010                48.267984                 7.406274 
##           DESVMATEMATICA 
##                 9.055529
apply(Icfes[,9:18], 2, sd)
##                EVALUADOS       PROMLECTURACRITICA           PROMMATEMATICA 
##                43.843946                 5.573827                 7.580989 
##  PROMSOCIALESYCIUDADANAS    PROMCIENCIASNATURALES               PROMINGLES 
##                 6.649614                 6.260166                 7.269747 
## PROMRAZONAMIENTOCUANTITA PROMCOMPETENCIASCIUDADAN       DESVLECTURACRITICA 
##                 8.120015                 5.730609                 1.731647 
##           DESVMATEMATICA 
##                 2.219776

by() Aplica la función sobre una división de una base de datos (data.frame) por un factor.

by(Icfes[,c(9:18)], Icfes$CALENDARIO, colMeans)
## Icfes$CALENDARIO: A
##                EVALUADOS       PROMLECTURACRITICA           PROMMATEMATICA 
##                45.393267                48.601547                48.741677 
##  PROMSOCIALESYCIUDADANAS    PROMCIENCIASNATURALES               PROMINGLES 
##                48.589383                48.972063                49.514758 
## PROMRAZONAMIENTOCUANTITA PROMCOMPETENCIASCIUDADAN       DESVLECTURACRITICA 
##                49.612257                48.229033                 7.436473 
##           DESVMATEMATICA 
##                 9.091584 
## -------------------------------------------------------- 
## Icfes$CALENDARIO: B
##                EVALUADOS       PROMLECTURACRITICA           PROMMATEMATICA 
##                16.685864                52.229529                52.711885 
##  PROMSOCIALESYCIUDADANAS    PROMCIENCIASNATURALES               PROMINGLES 
##                51.758220                52.761885                56.728743 
## PROMRAZONAMIENTOCUANTITA PROMCOMPETENCIASCIUDADAN       DESVLECTURACRITICA 
##                53.712199                50.859634                 5.469215 
##           DESVMATEMATICA 
##                 6.880628 
## -------------------------------------------------------- 
## Icfes$CALENDARIO: O
##                EVALUADOS       PROMLECTURACRITICA           PROMMATEMATICA 
##                47.566667                47.403333                46.788333 
##  PROMSOCIALESYCIUDADANAS    PROMCIENCIASNATURALES               PROMINGLES 
##                47.505333                46.544667                51.666667 
## PROMRAZONAMIENTOCUANTITA PROMCOMPETENCIASCIUDADAN       DESVLECTURACRITICA 
##                47.733333                47.271667                 7.718667 
##           DESVMATEMATICA 
##                 8.551333

lapply() Aplica una función sobre una lista o un vector.

l <- list(a = 1:10, b = 11:20)
lapply(l, mean)
## $a
## [1] 5.5
## 
## $b
## [1] 15.5
lapply(l, sum)
## $a
## [1] 55
## 
## $b
## [1] 155

sapply() Aplica una función sobre una lista o un vector y si el resultado se puede simplificar en un formato más simple, lo hace.

l <- list(a = 1:10, b = 11:20)
sapply(l, mean)
##    a    b 
##  5.5 15.5
sapply(l, sum)
##   a   b 
##  55 155

vapply() Aplica la función sobre una lista y devuelve el resultado de acuerdo a un formato indicado.

l <- list(a = 1:10, b = 11:20)
lFivenum <- vapply(l, 
                   fivenum, 
                   c(Min. = 0, "1er Cuart." = 0, 
                     Mediana = 0, "3er Cuart." = 0, Max. = 0))
class(lFivenum)
## [1] "matrix"
lFivenum
##               a    b
## Min.        1.0 11.0
## 1er Cuart.  3.0 13.0
## Mediana     5.5 15.5
## 3er Cuart.  8.0 18.0
## Max.       10.0 20.0

replicate() Replica la ejecución de una función un número específico de veces.s

replicate(10, rnorm(10))
##             [,1]        [,2]        [,3]        [,4]       [,5]       [,6]
##  [1,]  0.4159918  0.68452043 -0.82432435  1.91173065 -0.4325229 -0.8410961
##  [2,] -0.3269063 -1.41414532 -1.27326175  0.40588319  0.8429066  0.9620038
##  [3,] -0.7094948 -0.45757289  0.25232732 -1.20678868  0.8647470  1.2086273
##  [4,]  0.2878781 -0.06921045  0.04329311  1.20448429 -0.6466194  0.1453659
##  [5,] -1.1107180  1.77132553 -0.48125523 -2.56186097 -0.5090645  0.5963150
##  [6,]  1.0381331  0.58324073 -1.62355431 -0.06121217  0.8276813  0.5332769
##  [7,]  1.3197768  1.01401887  0.60834508 -0.74453797  1.3199990 -0.5096405
##  [8,]  0.6315210 -0.29680489 -1.57372991  1.07323390  0.5192054 -0.7073253
##  [9,] -0.6420539 -0.33915287  0.97000853  0.58963241 -0.5289340 -1.0752734
## [10,] -0.2188866 -0.45783952  0.04537551  0.96622140  1.2253106 -1.3437104
##               [,7]       [,8]        [,9]       [,10]
##  [1,]  0.741500549  1.4400315  1.56271523 -0.51419165
##  [2,] -0.137568261 -1.0467237  0.18125571  0.59084918
##  [3,]  1.214612465 -0.2923828  0.37023122 -0.03483158
##  [4,] -1.051518527 -0.3808571 -0.75374319 -0.66818680
##  [5,]  0.001775384  1.0714359 -0.16115601  2.12319886
##  [6,]  1.837939545  0.5117921 -0.08907589 -0.73825888
##  [7,]  0.760940951  0.6352738  0.56749662  0.13052829
##  [8,]  0.320877660  0.7223038 -1.67239977  0.35215466
##  [9,] -0.276719368  0.2565064  1.71067181  0.24385830
## [10,]  1.273665936  0.7014593 -1.92246471 -1.26538055
replicate(8, mean(rexp(10)))
## [1] 0.5656467 0.5643708 1.6820359 0.7960463 1.0256630 0.9727241 0.8560925
## [8] 0.9635558

mapply() Es la versión multivariada de lapply y sapply. Aplica la función a los elementos correspondientes de múltiples listas.

l1 <- list(a = c(1:10), b = c(11:20))
l2 <- list(c = c(21:30), d = c(31:40))
mapply(sum, l1$a, l1$b, l2$c, l2$d)
##  [1]  64  68  72  76  80  84  88  92  96 100
mapply(sum, l1, l2)
##   a   b 
## 310 510
l2 <- list(c = c(21:30), d = c(31:40), z = c(31:50))
mapply(sum, l1$a, l1$b, l2$c, l2$z)
##  [1]  64  68  72  76  80  84  88  92  96 100  74  78  82  86  90  94  98
## [18] 102 106 110

tapply() Aplica la función sobre un vector, de acuerdo a una clasificación de la variable tipo factor.

tapply(Icfes$EVALUADOS, Icfes$JORNADA, mean)
## COMPLETA U ORDINARIA               MAÑANA                NOCHE 
##             37.73148             49.74110             34.91196 
## SABATINA - DOMINICAL                TARDE 
##             35.92033             53.13094
tapply(Icfes$PROMRAZONAMIENTOCUANTITA, Icfes$JORNADA, mean)
## COMPLETA U ORDINARIA               MAÑANA                NOCHE 
##             54.80120             49.65380             42.64660 
## SABATINA - DOMINICAL                TARDE 
##             42.56121             49.44264

Tidyverse

En el universo de tidyverse la programación vía tuberías es la principal novedad.

install.packages("dplyr",dependencies = T)
library(dplyr)
Icfes2 <- tbl_df(Icfes)

Filtrar una base de datos

filter(Icfes2[1:100,], DEPARTAMENTO == "ANTIOQUIA",
       NOMBREMUNICIPIO == "MEDELLIN")
Icfes2[1:100,] %>% filter(DEPARTAMENTO == "ANTIOQUIA",
                  NOMBREMUNICIPIO == "MEDELLIN")

Selección de posiciones específicas de una base de datos

slice(Icfes2, 1000:1050)
Icfes2 %>%
  slice(1000:1050)

Ordenar la base de datos

arrange(Icfes2[1:100,], DEPARTAMENTO)
arrange(Icfes2[1:100,], DEPARTAMENTO, NOMBREINSTITUCION)
arrange(Icfes2[1:100,], PROMLECTURACRITICA)
arrange(Icfes2[1:100,], desc(PROMLECTURACRITICA))
Icfes2[1:100,] %>% 
  arrange(DEPARTAMENTO, desc(PROMLECTURACRITICA))

Seleccion de columnas

select(Icfes2[1:100,], NOMBREMUNICIPIO, DEPARTAMENTO, PROMLECTURACRITICA)
Icfes2[1:100,] %>%
  select(NOMBREMUNICIPIO, DEPARTAMENTO, PROMLECTURACRITICA)

Elementos o registros únicos

distinct(select(Icfes2, DEPARTAMENTO))
Icfes2 %>% 
  select(DEPARTAMENTO) %>% 
  distinct()

Adicionar una nueva columna

mutate(Icfes2[1:100,],promTotal=(PROMLECTURACRITICA+PROMMATEMATICA+PROMINGLES)/3)
Icfes2[1:100,] %>% 
  mutate(promTotal=(PROMLECTURACRITICA+PROMMATEMATICA+PROMINGLES)/3)
transmute(Icfes2[1:100,],promTotal=(PROMLECTURACRITICA+PROMMATEMATICA+PROMINGLES)/3)
Icfes2[1:100,] %>% 
  transmute(promTotal=(PROMLECTURACRITICA+PROMMATEMATICA+PROMINGLES)/3)

Resumir variables o consolidar valores

summarise(Icfes2, mean(PROMMATEMATICA))
Icfes2 %>% 
  summarise(mean(PROMMATEMATICA))

Agrupación

group_by(Icfes2[1:100,], DEPARTAMENTO)
Icfes2[1:100,] %>% 
  group_by(DEPARTAMENTO)

Combinación de “verbos” en base de datos

agrupados_deptos <- group_by(Icfes2, DEPARTAMENTO)
promedio_depto <- summarise(agrupados_deptos, mean(PROMMATEMATICA))
promedio_depto

Mediante encadenamiento de verbos

Icfes2 %>% 
  group_by(DEPARTAMENTO) %>% 
  summarise(mean(PROMMATEMATICA))

Combinación de manejo de datos

Icfes2 %>%
  mutate(promTotal = rowMeans(.[10:16])) %>%
  group_by(CODIGOMUNICIPIO) %>%
  arrange(desc(promTotal)) %>%
  select(NOMBREINSTITUCION, NOMBREMUNICIPIO, DEPARTAMENTO, promTotal) %>%
  slice(1:3)

¿Cuántas Instituciones Educativas tiene cada municipio?

Icfes2 %>%
  group_by(CODIGOMUNICIPIO, NOMBREMUNICIPIO, DEPARTAMENTO) %>%
  summarise(n = n()) %>%
  select(DEPARTAMENTO, NOMBREMUNICIPIO, n) %>%
  group_by(DEPARTAMENTO) %>%
  arrange(desc(n))
library(ggplot2)
Icfes2 %>% 
  ggplot(aes(x = PROMLECTURACRITICA,y = PROMMATEMATICA,
             fill=JORNADA,colour=JORNADA))+
  geom_point()

Icfes2 %>% 
  ggplot(aes(y = PROMMATEMATICA,x=DEPARTAMENTO,
             fill=DEPARTAMENTO))+
  geom_boxplot()+ theme(legend.position = "none",
                        axis.text.x = element_text(angle = 90))

Cristian Santa

Abril de 2019